/**
 * 测试页面错误检测功能
 * 验证爬虫能否正确识别"Product not available in this country or region"等错误
 */

const axios = require('axios');

const BASE_URL = 'http://localhost:3000/api/products';

/**
 * 测试页面错误检测
 */
async function testPageErrorDetection() {
  console.log('🔍 测试页面错误检测功能');
  console.log('=' .repeat(50));
  
  // 测试用例：可能会显示地区限制错误的URL
  const testCases = [
    {
      name: '正常商品URL',
      url: 'https://shop.tiktok.com/view/product/1731808168774042656?region=MY&local=en&source=product_detail',
      expectedError: null
    },
    {
      name: '可能的地区限制商品',
      url: 'https://shop.tiktok.com/view/product/1234567890123456789?region=US&local=en&source=product_detail',
      expectedError: 'REGION_RESTRICTED'
    },
    {
      name: '不存在的商品ID',
      url: 'https://shop.tiktok.com/view/product/9999999999999999999?region=MY&local=en&source=product_detail',
      expectedError: 'PRODUCT_NOT_FOUND'
    }
  ];
  
  for (let i = 0; i < testCases.length; i++) {
    const testCase = testCases[i];
    console.log(`\n📋 测试 ${i + 1}: ${testCase.name}`);
    console.log('URL:', testCase.url);
    
    try {
      const startTime = Date.now();
      
      // 测试普通商品处理接口
      const response = await axios.post(BASE_URL, {
        url: testCase.url
      });
      
      const endTime = Date.now();
      const duration = endTime - startTime;
      
      console.log(`⏱️  耗时: ${duration}ms`);
      console.log('响应状态:', response.status);
      console.log('成功:', response.data.success);
      console.log('消息:', response.data.message);
      
      if (!response.data.success) {
        console.log('错误类型:', response.data.error);
        console.log('错误详情:', response.data.details);
        
        if (response.data.isPageError) {
          console.log('✅ 正确检测到页面错误');
          console.log('页面错误类型:', response.data.error);
        } else {
          console.log('ℹ️  非页面错误，可能是网络或其他问题');
        }
      } else {
        console.log('✅ 商品处理成功');
        if (response.data.data && response.data.data.productName) {
          console.log('商品名称:', response.data.data.productName);
        }
      }
      
    } catch (error) {
      console.log('❌ 请求失败');
      console.log('HTTP状态:', error.response?.status);
      
      if (error.response && error.response.data) {
        console.log('错误消息:', error.response.data.message);
        console.log('错误类型:', error.response.data.error);
        console.log('错误详情:', error.response.data.details);
        
        if (error.response.data.isPageError) {
          console.log('✅ 正确检测到页面错误');
          console.log('页面错误类型:', error.response.data.error);
          
          // 验证错误类型是否符合预期
          if (testCase.expectedError && error.response.data.error === testCase.expectedError) {
            console.log('🎯 错误类型符合预期');
          }
        }
      }
    }
    
    // 等待一下避免请求过快
    if (i < testCases.length - 1) {
      console.log('等待3秒后继续下一个测试...');
      await new Promise(resolve => setTimeout(resolve, 3000));
    }
  }
}

/**
 * 测试完整流程接口的错误处理
 */
async function testCompleteFlowErrorHandling() {
  console.log('\n\n🔄 测试完整流程接口的错误处理');
  console.log('=' .repeat(50));
  
  const testUrl = 'https://shop.tiktok.com/view/product/9999999999999999999?region=MY&local=en&source=product_detail';
  
  try {
    console.log('测试URL:', testUrl);
    
    const response = await axios.post(`${BASE_URL}/complete-flow`, {
      url: testUrl
    });
    
    console.log('响应状态:', response.status);
    console.log('成功:', response.data.success);
    console.log('消息:', response.data.message);
    
    if (response.data.skipSubsequentSteps) {
      console.log('✅ 正确跳过了后续步骤');
    }
    
  } catch (error) {
    console.log('HTTP状态:', error.response?.status);
    
    if (error.response && error.response.data) {
      console.log('错误消息:', error.response.data.message);
      console.log('错误类型:', error.response.data.error);
      console.log('错误详情:', error.response.data.details);
      console.log('执行步骤:', error.response.data.step);
      
      if (error.response.data.skipSubsequentSteps) {
        console.log('✅ 正确跳过了后续步骤');
      }
      
      if (error.response.data.isPageError || error.response.data.step === 'tiktok_page_error') {
        console.log('✅ 完整流程正确处理了页面错误');
      }
    }
  }
}

/**
 * 测试智能爬虫的错误检测
 */
async function testSmartScraperErrorDetection() {
  console.log('\n\n🤖 测试智能爬虫的错误检测');
  console.log('=' .repeat(50));
  
  const testUrl = 'https://shop.tiktok.com/view/product/9999999999999999999?region=MY&local=en&source=product_detail';
  
  try {
    console.log('测试URL:', testUrl);
    
    const response = await axios.post(`${BASE_URL}/test/smart`, {
      url: testUrl
    });
    
    console.log('响应状态:', response.status);
    console.log('成功:', response.data.success);
    console.log('消息:', response.data.message);
    
    if (response.data.data) {
      console.log('爬虫数据:', response.data.data);
      
      if (response.data.data.isPageError) {
        console.log('✅ 智能爬虫正确检测到页面错误');
        console.log('错误类型:', response.data.data.error);
        console.log('错误消息:', response.data.data.message);
      }
    }
    
  } catch (error) {
    console.log('❌ 智能爬虫测试失败:', error.message);
  }
}

/**
 * 主函数
 */
async function main() {
  console.log('🚀 开始测试页面错误检测功能');
  console.log('服务器地址:', BASE_URL);
  
  // 测试普通接口的错误检测
  await testPageErrorDetection();
  
  // 测试完整流程接口的错误处理
  await testCompleteFlowErrorHandling();
  
  // 测试智能爬虫的错误检测
  await testSmartScraperErrorDetection();
  
  console.log('\n' + '='.repeat(50));
  console.log('🎉 所有测试完成！');
  console.log('\n💡 功能说明:');
  console.log('  - 当检测到"Product not available in this country or region"等错误时');
  console.log('  - 系统会直接记录失败日志并跳过后续步骤');
  console.log('  - 错误信息会包含页面上显示的具体错误原因');
  console.log('  - 不同类型的错误会返回相应的HTTP状态码');
}

// 运行测试
if (require.main === module) {
  main().catch(console.error);
}

module.exports = {
  testPageErrorDetection,
  testCompleteFlowErrorHandling,
  testSmartScraperErrorDetection
};